
import { isType } from "@/utils/util";
import { config } from "@/config/index";
import { ElNotification } from "element-plus";
import { GlobalStore } from "@/store";
import { AuthStore } from "@/store/modules/auth";
import { LOGIN_URL } from "@/config/index";
import router from "@/router/index";
import { notFoundRouter } from "@/router/modules/staticRouter";
import { shallowRef } from 'vue';

// 引入 views 文件夹下所有 vue 文件
var modules = import.meta.globEager('@/views/**/*.vue');
/**
 * 初始化动态路由
 */
export const initDynamicRouter = async () => {
	const authStore = AuthStore();
	const globalStore = GlobalStore();
	try {
		// 1.获取菜单列表 && 按钮权限（可合并到一个接口获取，根据后端不同可自行改造）
		await authStore.getAuthMenuList();
		await authStore.getAuthButtonList();
		// 2.判断当前用户有没有菜单权限
		if (!authStore.authMenuListGet.length) {
			ElNotification({
				title: "无权限访问",
				message: "当前账号无任何菜单权限，请联系系统管理员！",
				type: "warning",
				duration: 3000
			});
			globalStore.setToken("");
			router.replace(LOGIN_URL);
			return Promise.reject("No permission");
		}
		// 3.添加动态路由
		authStore.flatMenuListGet.forEach((item: any) => {
			// item.children && delete item.children;
			item.component = shallowRef(modules[`/src/views${item.path}/index.vue`]?.default);
			router.addRoute("layout", item);
		});
		// 4.最后添加 notFoundRouter
		router.addRoute(notFoundRouter);
	} catch (error) {
		// 💢 当按钮 || 菜单请求出错时，重定向到登陆页
		globalStore.setToken("");
		router.replace(LOGIN_URL);
		return Promise.reject(error);
	}
}